package main

import "errors"

func main() {

}

// Stack 栈
type Stack struct {
	data []interface{}
}

// NewStack 初始化栈
func NewStack() *Stack {
	return &Stack{
		make([]interface{}, 0),
	}
}

// Push 向栈顶部追加元素
func (s *Stack) Push(val interface{}) {
	s.data = append(s.data, val)
}

// Peek 返回栈顶的元素
func (s *Stack) Peek() (interface{}, error) {
	if s.IsEmpty() {
		return nil, errors.New("stack is Empty")
	}
	index := len(s.data)
	return s.data[index], nil
}

// Pop 从栈顶弹出一个元素
func (s *Stack) Pop() error {
	if s.IsEmpty() {
		return errors.New("stack is Empty")
	}
	index := len(s.data) - 1
	s.data = s.data[:index]
	return nil
}

func (s *Stack) IsEmpty() bool {
	if len(s.data) == 0 {
		return true
	}
	return false
}
